package socket

import (
	"github.com/gorilla/websocket"
	"sync"
)

// 客户端连接信息
type Client struct {
	ID            string          // 连接ID
	CustomerId    string          // 账号id, 一个账号可能有多个连接
	UseMark       string          // 标识
	Socket        *websocket.Conn // 连接
	HeartbeatTime int64           // 前一次心跳时间
}

// 客户端管理
type ClientManager struct {
	Clients  map[string]*Client  // 保存连接
	Accounts map[string][]string // 账号和连接关系,map的key是账号id即：AccountId，这里主要考虑到一个账号多个连接
	mu       *sync.Mutex
}

// 封装回复消息
type ServiceMessage struct {
	Type    string                `json:"type"` // 类型
	Content ServiceMessageContent `json:"content"`
}
type ServiceMessageContent struct {
	Body     string `json:"body"`      // 主要数据
	MetaData string `json:"meta_data"` // 扩展数据
}

// 消息类型
const (
	MessageTypeHeartbeat = "heartbeat" // 心跳
	MessageTypeRegister  = "register"  // 注册
	MessageTypeContent   = "content"   // 消息内容

	HeartbeatCheckTime = 9  // 心跳检测几秒检测一次
	HeartbeatTime      = 20 // 心跳距离上一次的最大时间

	ChanBufferRegister   = 100 // 注册chan缓冲
	ChanBufferUnregister = 100 // 注销chan大小
)

// 定义一个管理Manager
var Manager = ClientManager{
	Clients:  make(map[string]*Client),  // 参与连接的用户，出于性能的考虑，需要设置最大连接数
	Accounts: make(map[string][]string), // 账号和连接关系
	mu:       new(sync.Mutex),
}

var (
	RegisterChan   = make(chan *Client, ChanBufferRegister)   // 注册
	unregisterChan = make(chan *Client, ChanBufferUnregister) // 注销
)
